package conexao;

import erro.ConexaoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

/**
 * Estabelece as regras de conexão com o BD
 * @author George
 */
public class GerenciadorConexao {

    public String driver;
    private String url;
    private String user;
    private String pass;
    private static GerenciadorConexao instancia = null;
    private Connection conexao = null;

    private GerenciadorConexao() {

        ResourceBundle b = ResourceBundle.getBundle("conexao.banco");
        driver = b.getString("driver");
        url = b.getString("url");
        user = b.getString("user");
        pass = b.getString("pass");
    }
/**
 * Retorna a instancia da Gerenciador de Concexão (singleton) evita que ocorra  fila.
 * @return 
 */
    public static GerenciadorConexao getInstancia() {
        if (instancia == null) {
            instancia = new GerenciadorConexao();
        }
        return instancia;
    }
/**
 *  Método para conectar o sistema com o banco
 * @return
 * @throws ConexaoException 
 */
    public Connection connect() throws ConexaoException {
        if (conexao == null) {
            try {
                Class.forName(driver);
                conexao = DriverManager.getConnection(url, user, pass);
            } catch (ClassNotFoundException msg) {
                throw new ConexaoException(msg);
            } catch (SQLException ex) {
                throw new ConexaoException(ex);
            }
        }
        return conexao;
    }
/**
 * Método para desconectar o sistema com o banco
 * @throws ConexaoException 
 */
    public void disconnect() throws ConexaoException {
        try {
            conexao.close();
            conexao = null;
        } catch (SQLException ex) {
            throw new ConexaoException();
        } catch (NullPointerException ex) {
            throw new ConexaoException();
        }
    }
}
